package top.jlzhou.tools;


import javax.servlet.http.HttpServletResponse;

import top.jlzhou.tools.codec.Codec;

/**
 * <pre>
 *  通用工具总入口
 * 	工具可配置 classpath:tools.properties
 * 		#分布式雪花数的中央机房号
 * 		tools.id.centerId=0
 * 		#分布式雪花数的工作节点号
 * 		tools.id.workerId=0
 * 		#http工具实现
 * 		tools.http=top.jlzhou.tools.http.HttpServiceByHttpClientImpl
 *  Spring可以通bean配置
 * </pre>
 * 
 * @ClassName top.jlzhou.tools.Tools
 * @author J.L.Zhou
 * @date 2019年3月9日 下午6:40:15
 * @version V1.0
 * @Copyright 2019 jlzhou.top Inc. All rights reserved.
 *            注意：本内容仅限于公司内部传阅，禁止外泄以及用于其他的商业目
 */
public class T {

	


	/**
	 * <pre>工具类构造函数
	 * 	构造完成后会赋值给instance
	 * 	静态方法getInstance可以获取这个实力
	 * 	在未使用Spring配置的情况下，直接使用getInstance获取
	 * </pre>
	 * @Title:  Tools 
	 * @param http
	 * @param centerId
	 * @param workerId  
	 * @throws
	 */
	protected T(HttpService http, long centerId, long workerId) {
		this.http = http;
		this.id = new SnowflakeId(centerId, workerId);
	}


	public HttpService http;

	/**
	 * http网络服务
	 * 
	 * @return
	 */
	public HttpService getHttp() {
		return http;
	}

	/**
	 * 分布式雪花数
	 */
	public SnowflakeId id;

	/**
	 * 分布式雪花数
	 * 
	 * @return
	 */
	public SnowflakeId getId() {
		return id;
	}

	/**
	 * 字节工具
	 */
	public final BytesUtil bytes = new BytesUtil();

	/**
	 * 字节工具
	 * 
	 * @return
	 */
	public BytesUtil getBytes() {
		return bytes;
	}

	/**
	 * 网络工具
	 */
	public final NetUtil net = new NetUtil();

	/**
	 * 网络工具
	 * 
	 * @return
	 */
	public NetUtil getNet() {
		return net;
	}

	/**
	 * 文件工具
	 */
	public final FileUtil file = new FileUtil();

	/**
	 * 文件工具
	 * 
	 * @return
	 */
	public FileUtil getFile() {
		return file;
	}

	/**
	 * 加密/解密
	 */
	public final Codec codec = Codec.getCodec();

	/**
	 * 加密/解密
	 * 
	 * @return
	 */
	public Codec getCodec() {
		return codec;
	}

	/**
	 * 多线程断点续传下载工具类
	 */
	public final HttpDownloadUtil httpDownload = new HttpDownloadUtil();

	/**
	 * 多线程断点续传下载工具类
	 * 
	 * @return
	 */
	public HttpDownloadUtil getHttpDownload() {
		return httpDownload;
	}

	/**
	 * 拼音工具
	 */
	public final CnToSpell spell = CnToSpell.getInstance();

	/**
	 * 拼音工具
	 * 
	 * @return
	 */
	public CnToSpell getSpell() {
		return spell;
	}

	/**
	 * zip工具
	 */
	public final ZipUtil zip = new ZipUtil();

	/**
	 * zip工具
	 * 
	 * @return
	 */
	public ZipUtil getZip() {
		return zip;
	}

	/**
	 * 中文金钱数字工具
	 */
	public final MoneyUtil money = new MoneyUtil();

	/**
	 * 中文金钱数字工具
	 * 
	 * @return
	 */
	public MoneyUtil getMoney() {
		return money;
	}
	
	/**
	 * <pre>禁止响应缓存</pre> 
	 * setExpires
	 * @param response      
	 * @throws	CodeException:
	 */
	public void setExpires(HttpServletResponse response) {
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", Integer.MIN_VALUE);
	}

}
